package com.wyw.rabbit.learning;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

/**
 * @Title   工作队列的生产者，发送消息
 * @Description
 * @Author Mr Wu yewen.wu.china@gmail.com
 * @Date 2024/3/29 11:26
 * Update History:
 * Author        Time            Content
 */
public class WorkQueueProducer {

    public static void main(String[] args) throws Exception {

        // 1、创建连接工厂以及相关的参数配置
        ConnectionFactory factory = new ConnectionFactory();
        factory.setHost("127.0.0.1");
        factory.setPort(5672);
        factory.setVirtualHost("/");
        factory.setUsername("wyw");
        factory.setPassword("wyw");

        // 2、通过工厂创建连接
        Connection connection = factory.newConnection();

        // 3、创建管道
        Channel channel = connection.createChannel();

        // 4. 创建队列 Queue（简单模式不需要交换机Exchange）
        /**
         * queue        队列名
         * durable      是否持久化，true=重启之后队列依旧存在，false重启mq之后队列不存在
         * exclusive    是否独占，true=只能有一个消费者监听该队列，一般设置为false
         * autoDelete   是否自动删除，true=当没有消费者的时候，自动删除该队列
         * arguments    map类型的其他参数
         */
        channel.queueDeclare("work_queue", true, false, false, null);

        // 5. 向队列发送消息
        /**
         * exchange     交换机的名称，简单模式下没有，所以直接设置为 ""
         * routingKey   路由key，映射路径，如果交换机没有，则路由key和队列名保持一致
         * props        配置参数
         * body         消息数据
         */
        for (int i = 0; i < 10; i++) {
            String msg = "开始上班~~~[" + i + "]";
            channel.basicPublish("", "work_queue", null, msg.getBytes());

        }

        // 6. 释放资源
        channel.close();
        connection.close();

    }
}
